package com.lgit.model3.hw05;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class Model03Hw05 {

    public static void main(String[] args) {

        // 使用集合实现斗地主游戏的部分功能，要求如下：
        // （1）首先准备 54 张扑克牌并打乱顺序。
        // （2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。
        // （3）查看三个玩家手中的扑克牌和底牌。
        // （4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：
        // 手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
        //定义一个Map集合用来存储牌号和牌
        HashMap<Integer, String> pokerMap = new HashMap<>();
        //定义一个List集合用来存储牌号
        ArrayList<Integer> pokerNumList = new ArrayList<>();
        String[] colors = {"♥", "♤", "♧", "♢"};
        String[] nums = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
        int index = 2;
        for (String num : nums) {
            for (String color : colors) {
                String thisPoker = color + num;
                //将扑克牌放入Map集合
                pokerMap.put(index, thisPoker);
                //将牌号放入到pokerList集合中
                pokerNumList.add(index);
                index++;
            }
        }

        //将大王小王添加到集合
        pokerMap.put(0, "大王");
        pokerMap.put(1, "小王");
        pokerNumList.add(0);
        pokerNumList.add(1);

        //查看生成的牌
        System.out.println(pokerMap);
        System.out.println(pokerNumList);
        System.out.println("-------------------------------------------");

        //洗牌
        Collections.shuffle(pokerNumList);

        //发牌
        ArrayList<Integer> player1 = new ArrayList<>();
        ArrayList<Integer> player2 = new ArrayList<>();
        ArrayList<Integer> player3 = new ArrayList<>();
        ArrayList<Integer> diPai = new ArrayList<>();

        //遍历牌号的集合 判断索引发牌号
        for (int i = 0; i < pokerNumList.size(); i++) {
            Integer pokerNum = pokerNumList.get(i);
            if (i >= 51) {
                diPai.add(pokerNum);
            } else if (i % 3 == 0) {
                player1.add(pokerNum);
            } else if (i % 3 == 1) {
                player2.add(pokerNum);
            } else if (i % 3 == 2) {
                player3.add(pokerNum);
            }
        }

        //排序
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(diPai);

        show("刘备", player1, pokerMap);
        show("关羽", player2, pokerMap);
        show("张飞", player3, pokerMap);
        show("底牌", diPai, pokerMap);
    }

    //定义方法 看牌
    public static void show(String name, ArrayList<Integer> player, HashMap<Integer, String> pokerMap) {
        System.out.print(name + ":");
        for (Integer pokerNum : player) {
            String thisPoker = pokerMap.get(pokerNum);
            System.out.print(thisPoker + " ");
        }
        System.out.println();
    }
}